前置芝士:网络流-最大权闭合子图
定义:对于一个图的子图,当且仅当这个子图中的任意一点都不会与该子图外的点联通时,称这个子图为该图的闭合子图。在该图所有的闭合子图中,点权和最大的那个我们称作最大权闭合子图。
那么最大权闭合子图怎么求呢?
对于给出的图,如果要求将 $u,v$ 连一条边,那么从 $u$ 向 $v$ 连一条边权为 $inf$ 的边。
然后对于每个点如果该点的点权为正,那么从 $s$ 向该点连一条边权为该点点权的边,否则从该点向 $t$ 连一条边权为$-1\times$该点权的边。
跑最小割,这个时候最大权闭合子图的”最大权”为正点点权和-最小割。
最大权闭合子图跟这一题有什么关系呢?
可以发现,对于一个植物,僵尸必须先吃掉它右边的植物和保护它的植物才能吃它,那么这个植物就像它右边的植物与保护它的植物连边,这个连好边的图的最大权闭合子图就是答案!
但是值得注意的一点是,可能存在互相保护的关系,比如说样例中的 $(2,0)$ 保护 $(2,1)$ ,但是 $(2,1)$ 又作为 $(2,0)$ 右边的植物保护 $(2,0)$ ,然后这对关系怎么都是攻不破的,这是一个环!
于是我们可以先建好图后拓扑一边,然后再在访问过的点之间连边(该点访问过意味着该点不在环内),最后再跑最小割即可。
1 |
|